#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

struct ListNode {
    int val;
    ListNode* next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode* next) : val(x), next(next) {}
};

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        return dfs(l1, l2);
    }

    ListNode* dfs(ListNode* l1, ListNode* l2)
    {
        if (l1 == nullptr || l2 == nullptr)
        {
            return l1 == nullptr ? l2 : l1;
        }
        if (l1->val <= l2->val)
        {
            l1->next = dfs(l1->next, l2);
            return l1;
        }
        else
        {
            l2->next = dfs(l1, l2->next);
            return l2;
        }
    }
};

int main()
{
	return 0;
}
